{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 80
    },
    "colab_type": "code",
    "id": "zQzB9vJzAdFP",
    "outputId": "bb8cb507-cb4f-4ce0-e0a7-a231a521a4a2"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<p style=\"color: red;\">\n",
       "The default version of TensorFlow in Colab will soon switch to TensorFlow 2.x.<br>\n",
       "We recommend you <a href=\"https://www.tensorflow.org/guide/migrate\" target=\"_blank\">upgrade</a> now \n",
       "or ensure your notebook will continue to use TensorFlow 1.x via the <code>%tensorflow_version 1.x</code> magic:\n",
       "<a href=\"https://colab.research.google.com/notebooks/tensorflow_version.ipynb\" target=\"_blank\">more info</a>.</p>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import keras\n",
    "from keras.datasets import cifar10\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "from keras.models import Sequential\n",
    "from keras.callbacks import ModelCheckpoint\n",
    "from keras.layers import Dense, Dropout, Activation, Flatten\n",
    "from keras.layers import Conv2D, MaxPooling2D, BatchNormalization\n",
    "from keras import optimizers\n",
    "import numpy as np\n",
    "from keras.layers.core import Lambda\n",
    "from keras import backend as K\n",
    "from keras import regularizers\n",
    "import matplotlib.pyplot as plt\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "txjN7zONAfIj"
   },
   "outputs": [],
   "source": [
    "number_classes = 10\n",
    "wght_decay = 0.00005\n",
    "x_shape = [32,32,3]\n",
    "batch_size = 64\n",
    "maxepoches = 30\n",
    "learning_rate = 0.1\n",
    "learning_decay = 1e-6\n",
    "learning_drop = 20\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 51
    },
    "colab_type": "code",
    "id": "N27CkJz8AhG7",
    "outputId": "6d48afbf-29cd-4dd2-ad09-9c53f53b0de7"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n",
      "170500096/170498071 [==============================] - 4s 0us/step\n"
     ]
    }
   ],
   "source": [
    "(x_train, y_train), (x_test, y_test) = cifar10.load_data()\n",
    "x_train = x_train.astype('float32')\n",
    "x_test = x_test.astype('float32')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 911
    },
    "colab_type": "code",
    "id": "0e1YVCqJAjFS",
    "outputId": "c1a2e1cf-532f-4c5c-a607-68d3d5253dba"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n",
      "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n+aHPHrOTyM/CHNvHc18/kDhJqmp2IPFVZ75qrV2oqg8n+VKSo0k+1Vp7Yh/bXrZ3JbkvyTer6hvj\nso8neTDJZ6vqg0meSfK+Axof609+5Id+8iM/9JMf+aHPrrOTyM8idV/Wpqp+J8l7Wmu/P96/L8k7\nW2sf3uk5J06caKdPn+7a3mHz2GOPvdhaO3nQ42A55Ge55Gez7TU/srN7srP55Gd55Gez+d1tua6V\nn/3MsO5KVT2Q5IEkueuuu3L27Nllb3IjVNUzBz0GDp789JEfZKeP7JDITy/5IZGfXtfKz35OurSr\nA4lbaw+11s601s6cPOmPTjCSH+h33fzIDuxIfqCP390OyH4K61odSAwTIz/QT36gn/xAH9k5IN27\nBK/hgcQwGfID/eQH+skP9JGdg7OvY1hba19M8sUFjQUOFfmBfvID/eQH+sjOwdjPLsEAAACwNAor\nAAAAk6SwAgAAMEkKKwAAAJOksAIAADBJCisAAACTpLACAAAwSQorAAAAk6SwAgAAMEkKKwAAAJOk\nsAIAADBJCisAAACTpLACAAAwSQorAAAAk6SwAgAAMEkKKwAAAJOksAIAADBJCisAAACTpLACAAAw\nSQorAAAAk6SwAgAAMEkKKwAAAJOksAIAADBJCisAAACTpLACAAAwSQorAAAAk6SwAgAAMEkKKwAA\nAJOksAIAADBJCisAAACTpLACAAAwSQorAAAAk6SwAgAAMEkKKwAAAJOksAIAADBJCisAAACTpLAC\nAAAwSQorALTOdQDAUl23sFbVnVX11ap6sqqeqKqPjMtvq6ovV9W3x8+3Ln+4sF7kB/otLT8tV5bQ\ntuXz1sduXbf1+TAxfvZAP/mZnt3MsF5I8gettXuS/FqSD1XVPUk+luQrrbW7k3xlvA9cSX6gn/xA\nH9mBfvIzMdctrK21c621x8fbLyV5KskdSe5N8vD4sIeTvHdZg5y27f5Uv9Of37db50/1m0x+oN/S\n8lPjx+zbb819nE/ycpIfJ3lty7qtj4eJ8rMH+snP9Bzby4Or6nSStyf5epLbW2vnxlXfT3L7QkcG\nG0Z+oN/K8tOSXIpCysbwswf6yc807PqkS1V1c5LPJfloa+1H8+taaztOE1bVA1V1tqrOvvDCC/sa\n7DRd60/1FzP8if78eNuf6g8r+YF+Pfm5Zna2fvttGXYAa0luTHJLkpuTHM9QXi9u83g7xrAG/OyB\n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\nAADAJCmsAAAATNJBFNaHDmCbi7LOY2czrPN7cJ3HzmZY1/fguo6bzbHO78F1HjubYZ3fg5MY+8qP\nYQUAAIDdsEswAAAAk7SywlpV76mqb1XV01X1sVVtt0dV3VlVX62qJ6vqiar6yLj8tqr6clV9e/x8\n60GPlcNBfqCf/EA/+YF+8rOgsa1il+CqOprkT5O8O8mzSR5N8oHW2pNL33iHqjqV5FRr7fGquiXJ\nY0nem+T3kvygtfbg+Ka7tbX2hwc4VA4B+YF+8gP95Af6yc/irGqG9R1Jnm6tfae1dj7JZ5Lcu6Jt\n71lr7Vxr7fHx9ktJnkpyR4YxPzw+7OEMX0RYNvmBfvID/eQH+snPgqyqsN6R5Ltz958dl01eVZ1O\n8vYkX09ye2vt3Ljq+0luP6BhcbjID/STH+gnP9BPfhbESZeuoapuTvK5JB9trf1ofl0b9qV2imXY\ngfxAP/mBfvID/aaYn30V1j0cSPy9JHfO3X/LuGyyqup4hi/Wp1trnx8XPzfu3z3bz/v5gxof609+\n5Id+8iM/9JMf+aHPHk+iJD8L0l1YxwOJ/yjJbya5J8kHquqeHR7+aJK7q+ptVXVDkvcneaR328tW\nVZXkk0meaq19Ym7VI0nuH2/fn+QLqx4bm0F+5Id+8iM/9JMf+aHPHrOTyM/CHNvHc18/kDhJqmp2\nIPFVZ75qrV2oqg8n+VKSo0k+1Vp7Yh/bXrZ3JbkvyTer6hvjso8neTDJZ6vqg0meSfK+Axof609+\n5Id+8iM/9JMf+aHPrrOTyM8idV/Wpqp+J8l7Wmu/P96/L8k7W2sf3uk5J06caKdPn+7a3iTM9tre\nbl569t9Yc8sujcuPzj3mz5K8mOSWJHcluSHDzgHPJ7kpyekkb0wee+yxF1trJxf8L2AiDmV+Vkh+\nNtte8yM7uyc7m09+lkd+Npvf3ZbrWvnZzwzrrlTVA0keSJK77rorZ8+eXfYmF+/S+PnI3P0Xk/ww\nQ+E8keRN47qWy6X1x0leS/KT4/3zST6U5L9O8s4k/yDJzyb5T5L8l0n+WpJPJfnVpKqeWdK/hjWy\nEfk5APKD7PSRHRL56SU/JPLT61r52c9Jl3Z1IHFr7aHW2pnW2pmTJ9f0j07nk7y65f4Xk/ynSf5h\nku/MrWtzj52fbU2GmdYjc4/jMDs8+YHFu25+ZAd2JD/Qx+9uB2Q/hXWtDiTelwsZZkpnXkvyx0n+\n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\n",
      "text/plain": [
       "<Figure size 1296x576 with 25 Axes>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(18, 8))\n",
    "columns = 5\n",
    "rows = 5\n",
    "for i in range(1, columns*rows + 1):\n",
    "    fig.add_subplot(rows, columns, i)\n",
    "    plt.imshow(x_train[i], interpolation='lanczos')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "xxMCFE35Awcr"
   },
   "outputs": [],
   "source": [
    "mean = np.mean(x_train,axis=(0,1,2,3))\n",
    "std = np.std(x_train, axis=(0, 1, 2, 3))\n",
    "x_train = (x_train-mean)/(std+1e-7)\n",
    "x_test = (x_test-mean)/(std+1e-7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "XEDv7VsIAweL"
   },
   "outputs": [],
   "source": [
    "y_train = keras.utils.to_categorical(y_train, number_classes)\n",
    "y_test = keras.utils.to_categorical(y_test, number_classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 71
    },
    "colab_type": "code",
    "id": "xa5GFFkTA0Lv",
    "outputId": "7c7c569c-b189-41f5-cd09-92e65ed11fdb"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:66: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "model = Sequential()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 428
    },
    "colab_type": "code",
    "id": "zVJdzpqbA2Ak",
    "outputId": "89df2b79-f94c-46a4-cc8e-e2c82d5e18f4"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:541: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:4432: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:190: The name tf.get_default_session is deprecated. Please use tf.compat.v1.get_default_session instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:197: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:203: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:207: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:216: The name tf.is_variable_initialized is deprecated. Please use tf.compat.v1.is_variable_initialized instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:223: The name tf.variables_initializer is deprecated. Please use tf.compat.v1.variables_initializer instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:2041: The name tf.nn.fused_batch_norm is deprecated. Please use tf.compat.v1.nn.fused_batch_norm instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:148: The name tf.placeholder_with_default is deprecated. Please use tf.compat.v1.placeholder_with_default instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3733: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n"
     ]
    }
   ],
   "source": [
    "model.add(Conv2D(64, (3, 3), padding='same',\n",
    "                         input_shape=x_shape,kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Dropout(0.3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 71
    },
    "colab_type": "code",
    "id": "jsOy5yHPA4BJ",
    "outputId": "8e23be34-d07b-403c-b0d7-64880459cf41"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:4267: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "model.add(Conv2D(64, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "model.add(Conv2D(128, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Dropout(0.4))\n",
    "\n",
    "model.add(Conv2D(128, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Dropout(0.4))\n",
    "\n",
    "model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Dropout(0.4))\n",
    "\n",
    "model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "\n",
    "model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Dropout(0.4))\n",
    "\n",
    "model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Dropout(0.4))\n",
    "\n",
    "model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "\n",
    "model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Dropout(0.4))\n",
    "\n",
    "model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "model.add(Dropout(0.4))\n",
    "\n",
    "model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "\n",
    "model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "model.add(Dropout(0.5))\n",
    "\n",
    "model.add(Flatten())\n",
    "model.add(Dense(512,kernel_regularizer=regularizers.l2(wght_decay)))\n",
    "model.add(Activation('relu'))\n",
    "model.add(BatchNormalization())\n",
    "\n",
    "model.add(Dropout(0.5))\n",
    "model.add(Dense(number_classes))\n",
    "model.add(Activation('softmax'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "colab_type": "code",
    "id": "kYVlwkNKA6cj",
    "outputId": "38f80c09-4de0-4734-b08d-9225ef094dfe"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_1\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "conv2d_1 (Conv2D)            (None, 32, 32, 64)        1792      \n",
      "_________________________________________________________________\n",
      "activation_1 (Activation)    (None, 32, 32, 64)        0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_1 (Batch (None, 32, 32, 64)        256       \n",
      "_________________________________________________________________\n",
      "dropout_1 (Dropout)          (None, 32, 32, 64)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_2 (Conv2D)            (None, 32, 32, 64)        36928     \n",
      "_________________________________________________________________\n",
      "activation_2 (Activation)    (None, 32, 32, 64)        0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_2 (Batch (None, 32, 32, 64)        256       \n",
      "_________________________________________________________________\n",
      "max_pooling2d_1 (MaxPooling2 (None, 16, 16, 64)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_3 (Conv2D)            (None, 16, 16, 128)       73856     \n",
      "_________________________________________________________________\n",
      "activation_3 (Activation)    (None, 16, 16, 128)       0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_3 (Batch (None, 16, 16, 128)       512       \n",
      "_________________________________________________________________\n",
      "dropout_2 (Dropout)          (None, 16, 16, 128)       0         \n",
      "_________________________________________________________________\n",
      "conv2d_4 (Conv2D)            (None, 16, 16, 128)       147584    \n",
      "_________________________________________________________________\n",
      "activation_4 (Activation)    (None, 16, 16, 128)       0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_4 (Batch (None, 16, 16, 128)       512       \n",
      "_________________________________________________________________\n",
      "max_pooling2d_2 (MaxPooling2 (None, 8, 8, 128)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_5 (Conv2D)            (None, 8, 8, 256)         295168    \n",
      "_________________________________________________________________\n",
      "activation_5 (Activation)    (None, 8, 8, 256)         0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_5 (Batch (None, 8, 8, 256)         1024      \n",
      "_________________________________________________________________\n",
      "dropout_3 (Dropout)          (None, 8, 8, 256)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_6 (Conv2D)            (None, 8, 8, 256)         590080    \n",
      "_________________________________________________________________\n",
      "activation_6 (Activation)    (None, 8, 8, 256)         0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_6 (Batch (None, 8, 8, 256)         1024      \n",
      "_________________________________________________________________\n",
      "dropout_4 (Dropout)          (None, 8, 8, 256)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_7 (Conv2D)            (None, 8, 8, 256)         590080    \n",
      "_________________________________________________________________\n",
      "activation_7 (Activation)    (None, 8, 8, 256)         0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_7 (Batch (None, 8, 8, 256)         1024      \n",
      "_________________________________________________________________\n",
      "max_pooling2d_3 (MaxPooling2 (None, 4, 4, 256)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_8 (Conv2D)            (None, 4, 4, 512)         1180160   \n",
      "_________________________________________________________________\n",
      "activation_8 (Activation)    (None, 4, 4, 512)         0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_8 (Batch (None, 4, 4, 512)         2048      \n",
      "_________________________________________________________________\n",
      "dropout_5 (Dropout)          (None, 4, 4, 512)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_9 (Conv2D)            (None, 4, 4, 512)         2359808   \n",
      "_________________________________________________________________\n",
      "activation_9 (Activation)    (None, 4, 4, 512)         0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_9 (Batch (None, 4, 4, 512)         2048      \n",
      "_________________________________________________________________\n",
      "dropout_6 (Dropout)          (None, 4, 4, 512)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_10 (Conv2D)           (None, 4, 4, 512)         2359808   \n",
      "_________________________________________________________________\n",
      "activation_10 (Activation)   (None, 4, 4, 512)         0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_10 (Batc (None, 4, 4, 512)         2048      \n",
      "_________________________________________________________________\n",
      "max_pooling2d_4 (MaxPooling2 (None, 2, 2, 512)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_11 (Conv2D)           (None, 2, 2, 512)         2359808   \n",
      "_________________________________________________________________\n",
      "activation_11 (Activation)   (None, 2, 2, 512)         0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_11 (Batc (None, 2, 2, 512)         2048      \n",
      "_________________________________________________________________\n",
      "dropout_7 (Dropout)          (None, 2, 2, 512)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_12 (Conv2D)           (None, 2, 2, 512)         2359808   \n",
      "_________________________________________________________________\n",
      "activation_12 (Activation)   (None, 2, 2, 512)         0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_12 (Batc (None, 2, 2, 512)         2048      \n",
      "_________________________________________________________________\n",
      "dropout_8 (Dropout)          (None, 2, 2, 512)         0         \n",
      "_________________________________________________________________\n",
      "conv2d_13 (Conv2D)           (None, 2, 2, 512)         2359808   \n",
      "_________________________________________________________________\n",
      "activation_13 (Activation)   (None, 2, 2, 512)         0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_13 (Batc (None, 2, 2, 512)         2048      \n",
      "_________________________________________________________________\n",
      "max_pooling2d_5 (MaxPooling2 (None, 1, 1, 512)         0         \n",
      "_________________________________________________________________\n",
      "dropout_9 (Dropout)          (None, 1, 1, 512)         0         \n",
      "_________________________________________________________________\n",
      "flatten_1 (Flatten)          (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_1 (Dense)              (None, 512)               262656    \n",
      "_________________________________________________________________\n",
      "activation_14 (Activation)   (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "batch_normalization_14 (Batc (None, 512)               2048      \n",
      "_________________________________________________________________\n",
      "dropout_10 (Dropout)         (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 10)                5130      \n",
      "_________________________________________________________________\n",
      "activation_15 (Activation)   (None, 10)                0         \n",
      "=================================================================\n",
      "Total params: 15,001,418\n",
      "Trainable params: 14,991,946\n",
      "Non-trainable params: 9,472\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "qe7-otC6A9Ir"
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "SVJZ-2dgBGkC"
   },
   "outputs": [],
   "source": [
    "image_augm = ImageDataGenerator(\n",
    "            featurewise_center=False,  # set input mean to 0 over the dataset\n",
    "            samplewise_center=False,  # set each sample mean to 0\n",
    "            featurewise_std_normalization=False,  # divide inputs by std of the dataset\n",
    "            samplewise_std_normalization=False,  # divide each input by its std\n",
    "            zca_whitening=False,  # apply ZCA whitening\n",
    "            rotation_range=12,  # randomly rotate images in the range (degrees, 0 to 180)\n",
    "            width_shift_range=0.2,  # randomly shift images horizontally (fraction of total width)\n",
    "            height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)\n",
    "            horizontal_flip=True,  # randomly flip images\n",
    "            vertical_flip=False)  # randomly flip images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "m0yXwikeA9Mc"
   },
   "outputs": [],
   "source": [
    "image_augm.fit(x_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "z-mTG2c0A9PO"
   },
   "outputs": [],
   "source": [
    "sgd = optimizers.SGD(lr=learning_rate, decay=learning_decay, momentum=0.9, nesterov=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 105
    },
    "colab_type": "code",
    "id": "lsPYmyk1BMqW",
    "outputId": "a3f3c4f1-99bf-4d1b-a2c6-c269e95db98e"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/optimizers.py:793: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3576: The name tf.log is deprecated. Please use tf.math.log instead.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "model.compile(loss='categorical_crossentropy', optimizer=sgd,metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "N_jwDAjnBM85"
   },
   "outputs": [],
   "source": [
    "filepath=\"weights.best.hdf5\"\n",
    "checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "HtKRhOiOBNCK"
   },
   "outputs": [],
   "source": [
    "callbacks_list = [checkpoint]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "colab_type": "code",
    "id": "SRwcVHOkBNFU",
    "outputId": "07fa13f0-83b5-49f9-f6d4-a0deb22ad106"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/math_grad.py:1424: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:1033: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:1020: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n",
      "\n",
      "Epoch 1/30\n",
      "781/781 [==============================] - 45s 57ms/step - loss: 6.9232 - acc: 0.1993 - val_loss: 7.2896 - val_acc: 0.1711\n",
      "\n",
      "Epoch 00001: val_acc improved from -inf to 0.17110, saving model to weights.best.hdf5\n",
      "Epoch 2/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 6.0269 - acc: 0.2832 - val_loss: 6.3758 - val_acc: 0.2050\n",
      "\n",
      "Epoch 00002: val_acc improved from 0.17110 to 0.20500, saving model to weights.best.hdf5\n",
      "Epoch 3/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 5.3439 - acc: 0.3346 - val_loss: 5.1558 - val_acc: 0.3203\n",
      "\n",
      "Epoch 00003: val_acc improved from 0.20500 to 0.32030, saving model to weights.best.hdf5\n",
      "Epoch 4/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 4.8628 - acc: 0.3499 - val_loss: 7.2358 - val_acc: 0.2345\n",
      "\n",
      "Epoch 00004: val_acc did not improve from 0.32030\n",
      "Epoch 5/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 4.5701 - acc: 0.3506 - val_loss: 4.3578 - val_acc: 0.3947\n",
      "\n",
      "Epoch 00005: val_acc improved from 0.32030 to 0.39470, saving model to weights.best.hdf5\n",
      "Epoch 6/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 4.2407 - acc: 0.3515 - val_loss: 3.8234 - val_acc: 0.4249\n",
      "\n",
      "Epoch 00006: val_acc improved from 0.39470 to 0.42490, saving model to weights.best.hdf5\n",
      "Epoch 7/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 3.6796 - acc: 0.4235 - val_loss: 3.6112 - val_acc: 0.4566\n",
      "\n",
      "Epoch 00007: val_acc improved from 0.42490 to 0.45660, saving model to weights.best.hdf5\n",
      "Epoch 8/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 3.2855 - acc: 0.4719 - val_loss: 3.5861 - val_acc: 0.4469\n",
      "\n",
      "Epoch 00008: val_acc did not improve from 0.45660\n",
      "Epoch 9/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 2.9675 - acc: 0.5056 - val_loss: 2.8367 - val_acc: 0.5195\n",
      "\n",
      "Epoch 00009: val_acc improved from 0.45660 to 0.51950, saving model to weights.best.hdf5\n",
      "Epoch 10/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 2.6991 - acc: 0.5312 - val_loss: 2.5629 - val_acc: 0.5604\n",
      "\n",
      "Epoch 00010: val_acc improved from 0.51950 to 0.56040, saving model to weights.best.hdf5\n",
      "Epoch 11/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 2.4655 - acc: 0.5597 - val_loss: 2.2787 - val_acc: 0.6084\n",
      "\n",
      "Epoch 00011: val_acc improved from 0.56040 to 0.60840, saving model to weights.best.hdf5\n",
      "Epoch 12/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 2.2619 - acc: 0.5833 - val_loss: 2.1589 - val_acc: 0.6027\n",
      "\n",
      "Epoch 00012: val_acc did not improve from 0.60840\n",
      "Epoch 13/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 2.0786 - acc: 0.6079 - val_loss: 1.9367 - val_acc: 0.6475\n",
      "\n",
      "Epoch 00013: val_acc improved from 0.60840 to 0.64750, saving model to weights.best.hdf5\n",
      "Epoch 14/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 2.0600 - acc: 0.5946 - val_loss: 1.9059 - val_acc: 0.6384\n",
      "\n",
      "Epoch 00014: val_acc did not improve from 0.64750\n",
      "Epoch 15/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 1.8458 - acc: 0.6384 - val_loss: 1.7708 - val_acc: 0.6673\n",
      "\n",
      "Epoch 00015: val_acc improved from 0.64750 to 0.66730, saving model to weights.best.hdf5\n",
      "Epoch 16/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 1.7154 - acc: 0.6622 - val_loss: 1.6814 - val_acc: 0.6745\n",
      "\n",
      "Epoch 00016: val_acc improved from 0.66730 to 0.67450, saving model to weights.best.hdf5\n",
      "Epoch 17/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 1.6099 - acc: 0.6798 - val_loss: 1.4999 - val_acc: 0.7196\n",
      "\n",
      "Epoch 00017: val_acc improved from 0.67450 to 0.71960, saving model to weights.best.hdf5\n",
      "Epoch 18/30\n",
      "781/781 [==============================] - 36s 45ms/step - loss: 1.5142 - acc: 0.6975 - val_loss: 1.5438 - val_acc: 0.6993\n",
      "\n",
      "Epoch 00018: val_acc did not improve from 0.71960\n",
      "Epoch 19/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 1.4468 - acc: 0.7084 - val_loss: 1.3299 - val_acc: 0.7369\n",
      "\n",
      "Epoch 00019: val_acc improved from 0.71960 to 0.73690, saving model to weights.best.hdf5\n",
      "Epoch 20/30\n",
      "781/781 [==============================] - 35s 45ms/step - loss: 1.3775 - acc: 0.7217 - val_loss: 1.3248 - val_acc: 0.7456\n",
      "\n",
      "Epoch 00020: val_acc improved from 0.73690 to 0.74560, saving model to weights.best.hdf5\n",
      "Epoch 21/30\n",
      "781/781 [==============================] - 36s 46ms/step - loss: 1.3313 - acc: 0.7251 - val_loss: 1.2301 - val_acc: 0.7568\n",
      "\n",
      "Epoch 00021: val_acc improved from 0.74560 to 0.75680, saving model to weights.best.hdf5\n",
      "Epoch 22/30\n",
      "781/781 [==============================] - 36s 46ms/step - loss: 1.2817 - acc: 0.7386 - val_loss: 1.0858 - val_acc: 0.8026\n",
      "\n",
      "Epoch 00022: val_acc improved from 0.75680 to 0.80260, saving model to weights.best.hdf5\n",
      "Epoch 23/30\n",
      "781/781 [==============================] - 36s 46ms/step - loss: 1.2552 - acc: 0.7446 - val_loss: 1.2023 - val_acc: 0.7570\n",
      "\n",
      "Epoch 00023: val_acc did not improve from 0.80260\n",
      "Epoch 24/30\n",
      "781/781 [==============================] - 36s 46ms/step - loss: 1.2170 - acc: 0.7527 - val_loss: 1.3194 - val_acc: 0.7306\n",
      "\n",
      "Epoch 00024: val_acc did not improve from 0.80260\n",
      "Epoch 25/30\n",
      "781/781 [==============================] - 36s 46ms/step - loss: 1.2026 - acc: 0.7567 - val_loss: 1.1351 - val_acc: 0.7777\n",
      "\n",
      "Epoch 00025: val_acc did not improve from 0.80260\n",
      "Epoch 26/30\n",
      "781/781 [==============================] - 36s 46ms/step - loss: 1.1757 - acc: 0.7625 - val_loss: 1.0838 - val_acc: 0.7912\n",
      "\n",
      "Epoch 00026: val_acc did not improve from 0.80260\n",
      "Epoch 27/30\n",
      "781/781 [==============================] - 36s 46ms/step - loss: 1.1554 - acc: 0.7690 - val_loss: 0.9821 - val_acc: 0.8274\n",
      "\n",
      "Epoch 00027: val_acc improved from 0.80260 to 0.82740, saving model to weights.best.hdf5\n",
      "Epoch 28/30\n",
      "781/781 [==============================] - 36s 46ms/step - loss: 1.1403 - acc: 0.7699 - val_loss: 1.1028 - val_acc: 0.7885\n",
      "\n",
      "Epoch 00028: val_acc did not improve from 0.82740\n",
      "Epoch 29/30\n",
      "781/781 [==============================] - 36s 46ms/step - loss: 1.1073 - acc: 0.7805 - val_loss: 1.0811 - val_acc: 0.7917\n",
      "\n",
      "Epoch 00029: val_acc did not improve from 0.82740\n",
      "Epoch 30/30\n",
      "781/781 [==============================] - 36s 46ms/step - loss: 1.0992 - acc: 0.7835 - val_loss: 0.9948 - val_acc: 0.8231\n",
      "\n",
      "Epoch 00030: val_acc did not improve from 0.82740\n"
     ]
    }
   ],
   "source": [
    "trained_model = model.fit_generator(image_augm.flow(x_train, y_train,\n",
    "                                         batch_size=batch_size),\n",
    "                            steps_per_epoch=x_train.shape[0]//batch_size,\n",
    "                            epochs=maxepoches,\n",
    "                            validation_data=(x_test, y_test),callbacks=callbacks_list,verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 312
    },
    "colab_type": "code",
    "id": "6AW2ScuaBNIC",
    "outputId": "0e32b66e-126a-4e74-b74d-9a5555016478"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'acc')"
      ]
     },
     "execution_count": 19,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "f, ax = plt.subplots()\n",
    "ax.plot([None] + trained_model.history['acc'], 'o-')\n",
    "ax.plot([None] + trained_model.history['val_acc'], 'x-')\n",
    "ax.legend(['Train acc', 'Validation acc'], loc = 0)\n",
    "ax.set_title('Training/Validation acc per Epoch')\n",
    "ax.set_xlabel('Epoch')\n",
    "ax.set_ylabel('acc')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 312
    },
    "colab_type": "code",
    "id": "RsGP4WaAAwb2",
    "outputId": "51fba97d-e4c8-4747-adf0-c495b9ac4c4d"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'acc')"
      ]
     },
     "execution_count": 20,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nG2S+klKEbhfJAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "f, ax = plt.subplots()\n",
    "ax.plot([None] + trained_model.history['loss'], 'o-')\n",
    "ax.plot([None] + trained_model.history['val_loss'], 'x-')\n",
    "ax.legend(['Train loss', 'Validation loss'], loc = 0)\n",
    "ax.set_title('Training/Validation loss per Epoch')\n",
    "ax.set_xlabel('Epoch')\n",
    "ax.set_ylabel('acc')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "9wrY88W1BjIb"
   },
   "outputs": [],
   "source": [
    "predictions = trained_model.model.predict(x_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "whXOkbtQBjK6"
   },
   "outputs": [],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "import numpy as np\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 34
    },
    "colab_type": "code",
    "id": "PTOVnQ23BoL1",
    "outputId": "645d16ed-0f40-4808-b95a-eb5b9f2b9360"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8"
      ]
     },
     "execution_count": 23,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rounded_labels=np.argmax(y_test, axis=1)\n",
    "rounded_labels[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "55MAqtFQBoNY"
   },
   "outputs": [],
   "source": [
    "cm = confusion_matrix(rounded_labels, np.argmax(predictions,axis=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 187
    },
    "colab_type": "code",
    "id": "PMWSwTZWBoK-",
    "outputId": "f3b749c5-2821-4047-d885-b296c3fbebd6"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[796,  20,  30,   5,  19,   0,  10,  16,  60,  44],\n",
       "       [  1, 932,   0,   0,   1,   1,   1,   1,  19,  44],\n",
       "       [ 42,   4, 724,  18,  53,   9, 108,  25,  10,   7],\n",
       "       [ 25,   7,  37, 612,  49,  63, 112,  50,  23,  22],\n",
       "       [  4,   1,  25,  13, 818,   7,  73,  54,   3,   2],\n",
       "       [  6,  12,  39, 134,  47, 632,  48,  71,   2,   9],\n",
       "       [  4,   2,  13,  16,  11,   2, 943,   5,   2,   2],\n",
       "       [  4,   1,   8,  11,  19,   7,   9, 935,   2,   4],\n",
       "       [ 34,  10,   4,   0,   5,   0,   5,   5, 898,  39],\n",
       "       [  5,  31,   0,   1,   3,   0,   4,   6,   9, 941]])"
      ]
     },
     "execution_count": 25,
     "metadata": {
      "tags": []
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "aL8Rjt3MBjHV"
   },
   "outputs": [],
   "source": [
    "def plot_confusion_matrix(cm):\n",
    "    cm = [row/sum(row)   for row in cm]\n",
    "    fig = plt.figure(figsize=(10, 10))\n",
    "    ax = fig.add_subplot(111)\n",
    "    cax = ax.matshow(cm, cmap=plt.cm.Oranges)\n",
    "    fig.colorbar(cax)\n",
    "    plt.title('Confusion Matrix')\n",
    "    plt.xlabel('Predicted Class IDs')\n",
    "    plt.ylabel('True Class IDs')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 580
    },
    "colab_type": "code",
    "id": "FX1mHd5uGcyX",
    "outputId": "ff9077db-9a94-4b61-c28a-f819fc9e80f7"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n9PvdSZKkQTGxkSRpKIIX6JMkSeoKExtJkgaj/2dF9fvdSZKkQTGxkSRpSExsJEmSusHERpKkIfGs\nKEmSpG4wsZEkaTA8K0qSJKkzTGwkSRqKYGIjSZLUFTY2kiSpN5yKkiRpMPq/eNjGZmg6ef2CDta8\n/b62K5hIzXTvM37jhde3XcLEfvsHvrvtEiZyxkU3tV3CxKqq7RLUMhsbSZKGpJP/wF26fudRkiRp\nUExsJEkakp6vsen3u5MkSYNiYiNJ0mD0/6yofr87SZI0KCY2kiQNRYCZfmca/X53kiRpUExsJEka\nEq9jI0mS1A0mNpIkDYZnRUmSJHWGiY0kSUNiYiNJktQNNjaSJKk3nIqSJGkogqd7S5IkdYWJjSRJ\ng+Hp3pIkSZ1hYiNJ0pCY2EiSJHWDiY0kSUNiYiNJktQNJjaSJA1GvI6NJElSV5jYSJI0FME1NpIk\nSV1hYiNJ0pCY2EiSJHWDiY0kSYPhWVGSJEmdYWMjSZJ6w6koSZKGxMXDkiRJ3WBiI0nSkJjYSJIk\ndYOJjSRJQ5GY2EiSJHWFiY0kSUMy4wX6JEmSOsHERpKkIXGNjSRJUjeY2EiSNBieFSVJktQZqyux\nqe2w7T/armIitXaPtkuYUPdWwyfdq7k6dtZBJz/jaruCyf3WhTe2XcJEzvqhh7RdwsR+/bNXt13C\nZGr7dI8XTGwkSZK6YnUlNpIkqUEZXX24x0xsJElSb9jYSJKk3nAqSpKkQXEqSpIkqRNMbCRJGhJP\n95YkSeoGExtJkobE070lSZK6wcRGkqTBCH3PNPr97iRJ0qCY2EiSNCSusZEkSeoGExtJkoYimNhI\nkiR1hYmNJEmD4VlRkiRJndFoY5Pk15NsSXJZkvcn2bPJ40mSpEUk03m0pLHGJskhwMuB9VV1FLAG\nOKWp40mSpG5JckKSK5NcleT0nbx+WpLLk1ya5B+TPGyxMZueiloL7JVkLbA3cEPDx5MkSR2QZA1w\nNnAicCTwnCRHztntYkYByWOBjwC/u9i4jTU2VXU98FbgGuBG4I6q+sTc/ZKcmmRzks233HZ7U+VI\nkiRYTVNRxwFXVdXVVbUV+ABw8uwdqurTVXX3+OkXgHWLDdrkVNR3MSrwcOB7gH2SPG/uflW1oarW\nV9X6gw98YFPlSJKk6TpoR3Axfpw65/VDgGtnPb9uvG0+LwL+frGDNnm699OBr1TVLQBJPgo8Hji3\n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\n",
      "text/plain": [
       "<Figure size 720x720 with 2 Axes>"
      ]
     },
     "metadata": {
      "tags": []
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_confusion_matrix(cm)"
   ]
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "collapsed_sections": [],
   "name": "CIFAR10_VGG.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
